<?php

/*
 * 发布到新浪微博
 * free_dream 2014.4.22
 */

namespace Think;

class Weibo {

    public $config = array();

    public function __construct() {
        $weibo_sina_config = C('WEIBO_SDK_SINA');
        $this->config['WB_AKEY'] = $weibo_sina_config['WB_AKEY'];
        $this->config['WB_SKEY'] = $weibo_sina_config['WB_SKEY'];
        $this->config['WB_CALLBACK_URL'] = $weibo_sina_config['WB_CALLBACK_URL'];
    }

    function authorize() {
        import('Think.Sina.saetv2#ex');
        $o = new \SaeTOAuthV2($this->config['WB_AKEY'], $this->config['WB_SKEY']);
        $code_url = $o->getAuthorizeURL($this->config['WB_CALLBACK_URL']);
        $params = array(
            'client_id' => $this->config['WB_AKEY'],
            'client_secret' => $this->config['WB_SKEY'],
            'redirect_uri' => $this->config['WB_CALLBACK_URL'],
        );
        $this->http($code_url, $params,'POST');
    }

    /**
     * 发送HTTP请求方法，目前只支持CURL发送请求
     * @param  string $url    请求URL
     * @param  array  $params 请求参数
     * @param  string $method 请求方法GET/POST
     * @return array  $data   响应数据
     */
    protected function http($url, $params, $method = 'GET', $header = array(), $multi = false) {
        $opts = array(
            CURLOPT_TIMEOUT => 30,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_HTTPHEADER => $header
        );

        /* 根据请求类型设置特定参数 */
        switch (strtoupper($method)) {
            case 'GET':
                $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
                break;
            case 'POST':
                //判断是否传输文件
                $params = $multi ? $params : http_build_query($params);
                $opts[CURLOPT_URL] = $url;
                $opts[CURLOPT_POST] = 1;
                $opts[CURLOPT_POSTFIELDS] = $params;
                break;
            default:
                throw new Exception('不支持的请求方式！');
        }

        /* 初始化并执行curl请求 */
        $ch = curl_init();
        curl_setopt_array($ch, $opts);
        $data = curl_exec($ch);
        $error = curl_error($ch);
        curl_close($ch);
        if ($error)
            throw new Exception('请求发生错误：' . $error);
        return $data;
    }

}
